home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 140 / Gekkan Dennou Club - 2000.1 Vol. 140 (Japan).7z / Gekkan Dennou Club - 2000.1 Vol. 140 (Japan) (Track 1).bin / tools / xpicw / xpicw110.lzh / Source / load_text.s next >
Encoding:
Text File  |  1996-09-18  |  1.5 KB  |  80 lines

  1. *********************************************************
  2. *    load_text.s                    *
  3. *        テキストファイルの読み込み        *
  4. *    コール                        *
  5. *        pea.l    filename    * ファイル名    *
  6. *        bsr    load_text            *
  7. *        addq.w    #4,sp                *
  8. *    返り値                        *
  9. *        d0.l = ファイルサイズ            *
  10. *             < 0 の時はエラー            *
  11. *        a0.l = 読み込んだファイルのアドレス    *
  12. *        d0,a0 以外は保存            *
  13. *    備考                        *
  14. *        ファイル末尾に EOF ($1a) を追加します    *
  15. *********************************************************
  16.     .include    DOSCALL.MAC
  17.  
  18.     .xdef        load_text
  19.  
  20.     .text
  21.     .even
  22. load_text:
  23.     link    a6,#0
  24.     movem.l    d5-d7,-(sp)
  25.  
  26.     clr.w    -(sp)        * 読み込み専用
  27.     move.l    8(a6),-(sp)    * ファイル名
  28.     DOS    _OPEN
  29.     addq.w    #6,sp
  30.     tst.l    d0
  31.     bmi    err_rts
  32.     move.w    d0,d7        * d7.w = ファイルハンドル
  33.  
  34.     move.w    #2,-(sp)    * ファイルの長さを調べる
  35.     pea.l    0.w
  36.     move.w    d7,-(sp)
  37.     DOS    _SEEK
  38.     addq.w    #8,sp
  39.     move.l    d0,d6        * d6.l = ファイルサイズ
  40.     beq    err_rts        * ファイルサイズが異常
  41.  
  42.     clr.w    -(sp)        * ファイルポインタを元に戻す
  43.     pea    0.w
  44.     move.w    d7,-(sp)
  45.     DOS    _SEEK
  46.     addq.w    #8,sp
  47.  
  48.     addq.l    #1,d6        * 末尾の EOF のぶん
  49.     move.l    d6,-(sp)
  50.     DOS    _MALLOC
  51.     addq.w    #4,sp
  52.     move.l    d0,d5        * d5.l = アドレス
  53.     bmi    err_rts
  54.  
  55.     move.l    d6,-(sp)    * ファイルサイズ
  56.     move.l    d5,-(sp)    * アドレス
  57.     move.w    d7,-(sp)    * ファイルハンドル
  58.     DOS    _READ
  59.     lea.l    10(sp),sp
  60.     tst.l    d0
  61.     bmi    err_rts
  62.  
  63.     move.w    d7,-(sp)
  64.     DOS    _CLOSE
  65.     addq.w    #2,sp
  66.  
  67.     movea.l    d5,a0
  68.     move.l    d6,d0
  69.     move.b    #$1a,-1(a0,d0.l)    * 末尾に EOF を加える
  70.  
  71. load_text_rts:
  72.     movem.l    (sp)+,d5-d7
  73.     unlk    a6
  74.     rts
  75.  
  76. err_rts:
  77.     moveq.l    #-1,d0            * エラー終了
  78.     bra    load_text_rts
  79.  
  80.